Skip to content

Conversation

@dangotbanned
Copy link
Member

@dangotbanned dangotbanned commented Sep 1, 2025

What type of PR is this? (check all applicable)

  • πŸ’Ύ Refactor
  • ✨ Feature
  • πŸ› Bug Fix
  • πŸ”§ Optimization
  • πŸ“ Documentation
  • βœ… Test
  • 🐳 Other

Related issues

Checklist

  • Code follows style guide (ruff)
  • Tests added
  • Documented the changes

If you have comments or can explain your changes, please do so below

Will eventually be replacing most of this (so far only cast πŸ˜„):

class ExprDispatch(StoresVersion, Protocol[FrameT_contra, R_co, NamespaceT_co]):
_DISPATCH: ClassVar[Mapping[type[ExprIR], Callable[[Any, ExprIR, Any, str], Any]]] = {
expr.Column: lambda self, node, frame, name: namespace(self).col(
node, frame, name
),
expr.Literal: lambda self, node, frame, name: namespace(self).lit(
node, frame, name
),
expr.Len: lambda self, node, frame, name: namespace(self).len(node, frame, name),
# expr.Cast: lambda self, node, frame, name: self.cast(node, frame, name),
expr.Sort: lambda self, node, frame, name: self.sort(node, frame, name),
expr.SortBy: lambda self, node, frame, name: self.sort_by(node, frame, name),
expr.Filter: lambda self, node, frame, name: self.filter(node, frame, name),
agg.First: lambda self, node, frame, name: self.first(node, frame, name),
agg.Last: lambda self, node, frame, name: self.last(node, frame, name),
agg.ArgMin: lambda self, node, frame, name: self.arg_min(node, frame, name),
agg.ArgMax: lambda self, node, frame, name: self.arg_max(node, frame, name),
agg.Sum: lambda self, node, frame, name: self.sum(node, frame, name),
agg.NUnique: lambda self, node, frame, name: self.n_unique(node, frame, name),
agg.Std: lambda self, node, frame, name: self.std(node, frame, name),
agg.Var: lambda self, node, frame, name: self.var(node, frame, name),
agg.Quantile: lambda self, node, frame, name: self.quantile(node, frame, name),
agg.Count: lambda self, node, frame, name: self.count(node, frame, name),
agg.Max: lambda self, node, frame, name: self.max(node, frame, name),
agg.Mean: lambda self, node, frame, name: self.mean(node, frame, name),
agg.Median: lambda self, node, frame, name: self.median(node, frame, name),
agg.Min: lambda self, node, frame, name: self.min(node, frame, name),
expr.BinaryExpr: lambda self, node, frame, name: self.binary_expr(
node, frame, name
),
expr.RollingExpr: lambda self, node, frame, name: self.rolling_expr(
node, frame, name
),
expr.AnonymousExpr: lambda self, node, frame, name: self.map_batches(
node, frame, name
),
expr.FunctionExpr: lambda self, node, frame, name: self._dispatch_function(
node, frame, name
),
# NOTE: Keeping it simple for now
# When adding other `*_range` functions, this should instead map to `range_expr`
expr.RangeExpr: lambda self, node, frame, name: namespace(self).int_range(
node, frame, name
),
expr.OrderedWindowExpr: lambda self, node, frame, name: self.over_ordered(
node, frame, name
),
expr.WindowExpr: lambda self, node, frame, name: self.over(node, frame, name),
expr.Ternary: lambda self, node, frame, name: self.ternary_expr(
node, frame, name
),
}

And then something similar for this group as well:

_DISPATCH_FUNCTION: ClassVar[
Mapping[type[Function], Callable[[Any, FunctionExpr, Any, str], Any]]
] = {
boolean.AnyHorizontal: lambda self, node, frame, name: namespace(
self
).any_horizontal(node, frame, name),
boolean.AllHorizontal: lambda self, node, frame, name: namespace(
self
).all_horizontal(node, frame, name),
F.SumHorizontal: lambda self, node, frame, name: namespace(self).sum_horizontal(
node, frame, name
),
F.MinHorizontal: lambda self, node, frame, name: namespace(self).min_horizontal(
node, frame, name
),
F.MaxHorizontal: lambda self, node, frame, name: namespace(self).max_horizontal(
node, frame, name
),
F.MeanHorizontal: lambda self, node, frame, name: namespace(self).mean_horizontal(
node, frame, name
),
strings.ConcatHorizontal: lambda self, node, frame, name: namespace(

@dangotbanned dangotbanned changed the title refactor(expr-ir): Generate dispatch methods refactor(expr-ir): Generate dispatch methods (wip) Sep 1, 2025
@dangotbanned dangotbanned marked this pull request as ready for review September 1, 2025 16:19
@dangotbanned dangotbanned merged commit 92666dd into expr-ir/nw-namespace Sep 1, 2025
32 of 35 checks passed
@dangotbanned dangotbanned deleted the expr-ir/dispatch-gen branch September 1, 2025 16:20
dangotbanned added a commit that referenced this pull request Sep 1, 2025
Handled by #3073 **without** any other changes πŸ₯³
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants